iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Mobile Development

swift 30天之旅系列 第 11

第十一天:Swift進階 - 閉包

  • 分享至 

  • xImage
  •  

在前面的幾天,我們探討了Swift的基礎部分,如變數、常數、數據類型和基本控制流。今天,我們將開始探討Swift的進階特性,首先是閉包。

什麼是閉包?

閉包在Swift中是自包含的功能塊,可以在你的程式碼中被傳遞和使用。閉包可以抓取和存儲其所在的上下文中的任何常數和變數的引用。這是所謂的閉合其周圍的上下文,因此得名閉包。

如果你之前有JavaScript或其他語言的經驗,閉包與匿名函數或lambda函數有相似之處。

閉包的語法

閉包的基本語法如下:

{ (參數) -> 返回值類型 in
    // 這裡是閉包的主體部分
}

例如,以下閉包接受兩個整數參數,返回它們的和:

let sumClosure: (Int, Int) -> Int = { (a, b) in
    return a + b
}

let result = sumClosure(5, 7)  // 這會返回 12

為什麼使用閉包?

閉包特別適用於那些要作為另一函數參數的短小功能塊。例如,Swift的陣列有一個sorted方法,可以讓你提供一個閉包來定義如何比較陣列中的元素。

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
let sortedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
    return s1 < s2
})

閉包的縮寫語法

Swift知道sorted(by:)方法期望接收的閉包的類型,所以你可以使用縮寫語法,並省略類型和參數。

let sortedNamesShort = names.sorted(by: { s1, s2 in s1 < s2 })

更進一步,可以使用Swift提供的$0, $1等縮寫,代表閉包的第一個、第二個參數,並直接將其用於表達式:

let sortedNamesShortest = names.sorted(by: { $0 < $1 })

尾隨閉包

如果需要將一個很長的閉包作為函數的最後一個參數,Swift允許你使用尾隨閉包語法,將其寫在函數參數括號的外部:

let sortedNamesTrailing = names.sorted { $0 < $1 }

閉包在實際中的應用

閉包在Swift中被廣泛使用,特別是在非同步程式設計和功能響應模式中。例如,當從網絡加載數據或等待某個長時間運行的任務完成時,可以使用閉包來捕獲完成的瞬間和結果。

總結:

閉包是Swift中一個強大而靈活的功能,它允許你編寫更加簡潔、直觀和模組化的程式碼。


上一篇
第十天:Swift Protocols
下一篇
第十二天:Swift進階 - 泛型
系列文
swift 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言